#include <string>
#include "loop.h"

namespace AST {

    // Construtor
    Loop::Loop(Node* expression, Node* command) {
        // Configurações
        this->_setExpression(expression)->_setCommand(command);
    };

    // Configuração de Expressão Condicional
    Loop* Loop::_setExpression(Node* expression) {
        // Configuração
        this->_expression = expression;
        // Encadeamento
        return this;
    };

    // Configuração de Bloco de Comandos em Sucesso
    Loop* Loop::_setCommand(Node* command) {
        // Configuração
        this->_command = command;
        // Encadeamento
        return this;
    };

    // Apresenta a Expressão Condicional
    Node* Loop::getExpression() {
        // Apresentação
        return this->_expression;
    };

    // Apresenta o Bloco de Comandos em Sucesso
    Node* Loop::getCommand() {
        // Apresentação
        return this->_command;
    };

    // Sobrescrita
    std::string Loop::toString(int indent) {
        return this->getIndentSpaces(indent)
            + "Loop\n"
            + this->getIndentSpaces(indent + 1) + "Expression\n"
                + this->getExpression()->toString(indent + 2) + "\n"
            + this->getIndentSpaces(indent + 1) + "Commands\n"
                + this->getCommand()->toString(indent + 2);
    };

};

